SAM : Sharpness-Aware Minimization
https://gyazo.com/43c0a1c123539158ab4a53ae26372fe0
ImageNetやCIFARを含む9つの画像分類データセットでSoTAを更新
SAMは損失が最小かつその周りも平坦となっているパラメータを探す
$ \min_{\mathbf{w}} L_\mathcal{S}^\text{SAM}(\mathbf{w})+\lambda\|\mathbf{w}\|_2^2
$ L_\mathcal{S}^\text{SAM}(\mathbf{w}) は以下のように定義. $ L_\mathcal{S} は通常の損失関数. 何でもOK
$ L_\mathcal{S}^\text{SAM}(\mathbf{w}) \triangleq \max_{\|\mathbf{\epsilon}\|_p\leq\rho} L_\mathcal{S}(\mathbf{w}+\mathbf{\epsilon})
↑ 要はwの近傍まで考慮して最適化するので, 上図のように最小かつ周囲が平坦になる
最大化するεは一意に定まり, 解析的に求まるので, あとはその解に則ってアルゴリズムが定式化される
二回勾配を計算しないといけないので, 他の手法と比較する際はエポック数を2倍する必要があるので注意
https://gyazo.com/44a2521d68cfb0de5bdb2b5603dfe17f
1. 勾配を計算 (橙)
.2. 勾配のノルムを計算(全レイヤーまとめてスカラー値にする)
3. 勾配の逆方向に重みをずらす(ずらす量は2で計算したスカラー値に反比例させる) (橙)
4. ずらした重みで勾配を再計算 (青)
5. ずらした重みを元に戻す (青)
6. 4で計算した勾配を使って、Optimizer(アルゴリズムはなんでもいい)を使って、重みを決定 (青)